Our modem connected world is facilitated by message processors communicating messages back and forth. A message processor may be quite complex such as a fully capable computing system or even a collection of computing systems. A message processor may also be considered as an application. Message processors frequently use queues to exchange messages reliably while providing isolation between message processors. Queues allow message processors (i.e., “senders”) to send messages at any time without requiring a direct connection to the message processor (i.e., the “consumer”) that handles the message. This allows the message processors to be spatially and temporally decoupled. A consumer application consumes messages from a queue by removing the message at the head of the queue and processing its contents. As the consumer and sender do not coordinate message transmission, the consumer commonly processes messages in a continuous fashion.
Workflow is an application development technology that provides scenarios for which continuous message processing is undesirable. Authoring a message consumer in the form of a workflow that is capable of processing any message at any time is generally regarded as a difficult development task. Therefore, a workflow application is typically an intermittent consumer of messages. At any instant, the workflow application can only process a subset (possibly an empty set) of the possible application messages; the message at the head of the queue may not be in this set.
A workflow application may share a single queue among multiple instances. Each instance has its own set of currently processable messages and messages for an instance that is ready to process messages may sit in the queue behind messages for an instance that is not ready to process messages.
A known solution to the intermittent consumer problem is to demultiplex the messages so that each consumer reads from an independent physical queue. Thus, a message for one consumer that is not yet ready to process messages may be placed in a physically distinct queue as compared to a message for a consumer that is ready to process the message.